package com.mall.user.adapter.in.web.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * 用户列表响应DTO
 * 用于返回用户列表查询结果
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class UserListResponseDTO {
    
    /**
     * 用户列表
     */
    private List<UserResponseDTO> users;
    
    /**
     * 总数量
     */
    private Long total;
    
    /**
     * 当前页码（从0开始）
     */
    private Integer page;
    
    /**
     * 每页大小
     */
    private Integer size;
    
    /**
     * 是否有下一页
     */
    private Boolean hasNext;
    
    /**
     * 是否有上一页
     */
    private Boolean hasPrevious;
    
    /**
     * 总页数
     */
    private Integer totalPages;
    
    /**
     * 创建简单的用户列表响应（不包含分页信息）
     * @param users 用户列表
     * @return 用户列表响应DTO
     */
    public static UserListResponseDTO of(List<UserResponseDTO> users) {
        return UserListResponseDTO.builder()
                .users(users)
                .total((long) users.size())
                .build();
    }
    
    /**
     * 创建带分页信息的用户列表响应
     * @param users 用户列表
     * @param total 总数量
     * @param page 当前页码
     * @param size 每页大小
     * @return 用户列表响应DTO
     */
    public static UserListResponseDTO of(List<UserResponseDTO> users, Long total, Integer page, Integer size) {
        int totalPages = (int) Math.ceil((double) total / size);
        boolean hasNext = page < totalPages - 1;
        boolean hasPrevious = page > 0;
        
        return UserListResponseDTO.builder()
                .users(users)
                .total(total)
                .page(page)
                .size(size)
                .hasNext(hasNext)
                .hasPrevious(hasPrevious)
                .totalPages(totalPages)
                .build();
    }
}